#ifndef INDEXED_ARRAY
#define INDEXED_ARRAY

/* IndexedArray
*************************************************************************************
*
*   Does not resize
*
*************************************************************************************
*
*   Credits
*
*		Richard Rios
*		Aaron Solomon
*
*************************************************************************************/

template <typename TYPE, int MAX>
class IndexedArray {
	/*************************************************************************************
	*
	*	Fields
	*/
	private:
		TYPE values[MAX];

		int count;

	public:
		static const int EXCEPTION_OVERFLOW			= 1; //thrown when writing too many elements to the array
		static const int EXCEPTION_OUT_OF_BOUNDS	= 2; //thrown when trying to read an element outside of the bounds of the array
	/*
	*************************************************************************************
	*
	*	Constructors
	*/
		IndexedArray();
		/*
		*
		*   Description
		*   -----------------------
		*
		*       Creates and initializes an Indexed Array
		*
		*   Takes
		*   -----------------------
		*
		*       nothing
		*
		*   Returns
		*   -----------------------
		*
		*       initialized IndexedArray
		*
		*/
	/*
	*************************************************************************************
	*
	*	Operators
	*
	*		Setters
	*/
			/* none */
	/*
	**************************************************************************************
	*
	*		Getters
	*/
			TYPE get(int index);
			/*
			*
			*   Description
			*   -----------------------
			*
			*       Reads an element directly out of the array
			*			-	arr[index] == get(index)
			*
			*   Takes
			*   -----------------------
			*
			*       int index
			*
			*   Returns
			*   -----------------------
			*
			*       TYPE
			*
			*/

			int getCount(); //gets current number of elements in the array
	/*
	*************************************************************************************
	*
	*	Methods
	*/
		void insert(TYPE value);
		/*
		*
		*   Description
		*   -----------------------
		*
		*       Inserts an element into the indexed array
		*			-	arr.insert(value) -> arr[arr.count++] = value
		*
		*   Takes
		*   -----------------------
		*
		*       TYPE value
		*
		*   Returns
		*   -----------------------
		*
		*       nothing
		*
		*/
	/*
	*************************************************************************************/
}; //class IndexedArray

#define INDEXED_ARRAY_HPP
#include "IndexedArray.cpp"
#undef INDEXED_ARRAY_HPP

#endif